package com.work.daily.stream;

import java.util.Arrays;
import java.util.List;
import java.util.stream.IntStream;
import java.util.stream.Stream;

/**
 * 初识 Stream,Stream 的创建
 *
 * @author Shengkang.Mo
 * @create 2020-11-23 15:27
 * stream不存储数据，而是按照特定的规则对数据进行计算，一般会输出结果。
 * stream不会改变数据源，通常情况下会产生一个新的集合或一个值。
 * stream具有延迟执行特性，只有调用终端操作时，中间操作才会执行。
 */
public class Stream_1 {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("a", "b", "c");

        //1、通过 java.util.Collection.stream() 方法用集合创建流
        //创建一个顺序流
        Stream<String> stream = list.stream();

        //创建一个并行流
        Stream<String> parallelStream = list.parallelStream();

        //2.使用java.util.Arrays.stream(T[] array)方法用数组创建流
        int[] array = {1, 2, 3, 5, 8};
        IntStream intStream = Arrays.stream(array);
        intStream.forEach(System.out::println);

        //3、使用Stream的静态方法：of()、iterate()、generate()
        Stream<Integer> stream1 = Stream.of(1, 2, 3);

        Stream<Integer> stream2 = Stream.iterate(0, (x) -> x + 3).limit(4);
        System.out.println("stream2:");
        stream2.forEach(System.out::println);

        Stream<Double> stream3 = Stream.generate(Math::random).limit(3);
        System.out.println("stream3:");
        stream3.forEach(System.out::println);
    }
}
